package com.whfc.ms.api.emp.controller;

import com.whfc.common.base.BaseController;
import com.whfc.common.result.ListData;
import com.whfc.common.result.PageData;
import com.whfc.common.result.Result;
import com.whfc.common.result.ResultUtil;
import com.whfc.common.util.SessionAttr;
import com.whfc.emp.dto.*;
import com.whfc.fuum.entity.SysUser;
import com.whfc.ms.api.emp.service.MsAppEmpDataAnaService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

/**
 * 设备分析接口
 *
 * @author guodong_sun
 * @Description:
 * @date 2019年7月30日
 */
@RequiresPermissions("emp/ana")
@RestController
@RequestMapping("/ms/api/ana")
public class AppEmpAnaController extends BaseController {

    @Autowired
    private MsAppEmpDataAnaService msAppEmpDataAnaService;


    /**
     * 人员分析-获取人员分析数据
     *
     * @param user
     * @return
     */
    @GetMapping("/emp/getData")
    public Result getEmpData(@SessionAttribute(SessionAttr.MS_USER) SysUser user,
                             @RequestParam("deptId") Integer deptId) {
        logger.info("获取人员分析数据,loginer:{},deptId:{}", user.getUsername(), deptId);
        AppEmpDataDTO appEmpDataDTO = msAppEmpDataAnaService.getEmpData(deptId);
        return ResultUtil.success(appEmpDataDTO);
    }

    /**
     * 考勤大屏-现场人员分析
     *
     * @param user
     * @return
     */
    @GetMapping("/emp/getSpotData")
    public Result getSpotEmpData(@SessionAttribute(SessionAttr.MS_USER) SysUser user,
                             @RequestParam("deptId") Integer deptId) {
        logger.info("考勤大屏-现场人员分析,loginer:{},deptId:{}", user.getUsername(), deptId);
        AppEmpSpotDataDTO appEmpSpotDataDTO = msAppEmpDataAnaService.getSpotEmpData(deptId);
        return ResultUtil.success(appEmpSpotDataDTO);
    }

    /**
     * 人员分析-获取最近出勤人员
     *
     * @param user
     * @return
     */
    @GetMapping("/emp/getRecentAttendEmp")
    public Result getRecentAttendEmp(@SessionAttribute(SessionAttr.MS_USER) SysUser user,
                                     @RequestParam("deptId") Integer deptId) {
        logger.info("人员分析-获取最近出勤人员,loginer:{},deptId:{}", user.getUsername(), deptId);
        PageData<AppAnaEmpDTO> pageData = msAppEmpDataAnaService.getRecentAttendEmp(deptId);
        return ResultUtil.success(pageData);
    }


    /**
     * 人员分析-获取最近进场人员
     *
     * @param user
     * @return
     */
    @GetMapping("/emp/getRecentEnterEmp")
    public Result getRecentEnterEmp(@SessionAttribute(SessionAttr.MS_USER) SysUser user,
                                    @RequestParam("deptId") Integer deptId) {
        logger.info("人员分析-获取最近进场人员,loginer:{},deptId:{}", user.getUsername(), deptId);
        PageData<AppAnaEmpDTO> pageData = msAppEmpDataAnaService.getRecentEnterEmp(deptId);
        return ResultUtil.success(pageData);
    }

    /**
     * 人员分析-班组统计
     *
     * @param user
     * @return
     */
    @GetMapping("/emp/getGroupEmp")
    public Result getGroupEmp(@SessionAttribute(SessionAttr.MS_USER) SysUser user,
                              @RequestParam("deptId") Integer deptId) {
        logger.info("人员分析-班组统计,loginer:{},deptId:{}", user.getUsername(), deptId);
        AppEmpStatisticsDTO data = msAppEmpDataAnaService.getGroupEmp(deptId);
        return ResultUtil.success(data);
    }

    /**
     * 人员分析-合作单位统计
     *
     * @param user
     * @return
     */
    @GetMapping("/emp/getCorpEmp")
    public Result getCorpEmp(@SessionAttribute(SessionAttr.MS_USER) SysUser user,
                             @RequestParam("deptId") Integer deptId) {
        logger.info("人员分析-合作单位统计,loginer:{},deptId:{}", user.getUsername(), deptId);
        AppEmpStatisticsDTO data = msAppEmpDataAnaService.getCorpEmp(deptId);
        return ResultUtil.success(data);
    }

    /**
     * 人员分析-工种统计
     *
     * @param user
     * @return
     */
    @GetMapping("/emp/getWorkEmp")
    public Result getWorkEmp(@SessionAttribute(SessionAttr.MS_USER) SysUser user,
                             @RequestParam("deptId") Integer deptId) {
        logger.info("人员分析-工种统计,loginer:{},deptId:{}", user.getUsername(), deptId);
        AppEmpStatisticsDTO data = msAppEmpDataAnaService.getWorkEmp(deptId);
        return ResultUtil.success(data);
    }

    /**
     * 人员分析-每天不同班组出勤情况
     *
     * @param user
     * @param date
     * @return
     */
    @GetMapping("/emp/getWordDayAttendData")
    @Deprecated
    public Result getWordDayAttendData(@SessionAttribute(SessionAttr.MS_USER) SysUser user,
                                       @RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") Date date,
                                       @RequestParam("deptId") Integer deptId) {
        logger.info("人员分析-每天不同工种出勤情况,loginer:{},date:{}", user.getUsername(), date);
        ListData<AppEmpAttendGroupDTO> pageData = msAppEmpDataAnaService.getWordDayAttendData(deptId, date);
        return ResultUtil.success(pageData);
    }

    @GetMapping("/empLog")
    public Result empLog(@SessionAttribute(SessionAttr.MS_USER) SysUser user,
                         @RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") Date date,
                         @RequestParam("deptId") Integer deptId) {
        logger.info("人员日志,loginer:{},date:{}", user.getUsername(), date);
        AppEmpLogDTO data = msAppEmpDataAnaService.empLog(deptId, date);
        return ResultUtil.success(data);
    }
}
